package com.example.demo8;

import javafx.application.Platform;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.Pane;
import javafx.scene.layout.VBox;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;
import javafx.scene.effect.DropShadow;
import javafx.scene.effect.Glow;
import java.net.URISyntaxException;
import java.util.Arrays;
import java.util.List;

public class StartScreen {
    private Scene scene;
    private ImageView backgroundView; //背景
    private Button singlePlayerBtn; // 单人模式
    private Button twoPlayerBtn; // 双人模式
    private Button exitButton; // 退出游戏按钮
    private VBox menuBox;

    // 音乐相关变量
    private MediaPlayer mediaPlayer;
    private Button musicButton; // 使用Button控件作为音乐开关
    private boolean isMusicPlaying = true; // 默认开启音乐

    public StartScreen(Runnable onSinglePlayer, Runnable onTwoPlayer) {
        initialize(onSinglePlayer, onTwoPlayer);
    }

    private void initialize(Runnable onSinglePlayer, Runnable onTwoPlayer) {
        // 加载背景图片
        Image backgroundImage = new Image(getClass().getResourceAsStream("/千恋万花开始界面1.jpg"));
        backgroundView = new ImageView(backgroundImage);
        backgroundView.setFitWidth(1555);
        backgroundView.setFitHeight(972);

        // 创建音乐图标
        try {
            // 1. 加载背景音乐
            Media sound = new Media(getClass().getResource("/bgm.mp3").toURI().toString());
            mediaPlayer = new MediaPlayer(sound);
            mediaPlayer.setCycleCount(MediaPlayer.INDEFINITE); // 循环播放
            mediaPlayer.setVolume(0.3); // 音量30%

            // 2. 创建音乐按钮
            musicButton = new Button("🔊 音乐"); // 默认显示喇叭图标+文字
            musicButton.setFont(Font.font("Microsoft YaHei", FontWeight.NORMAL, 14)); // 参考图字体大小

            // 3. 设置按钮样式（与参考图灰色按钮风格一致）
            String defaultStyle = "-fx-background-color: #e0e0e0; " + // 浅灰色背景
                    "-fx-text-fill: black; " + // 黑色文字
                    "-fx-padding: 5 10; " + // 小边距
                    "-fx-border-radius: 3; " + // 圆角
                    "-fx-background-radius: 3; " +
                    "-fx-min-width: 80px;"; // 固定宽度

            String hoverStyle = "-fx-background-color: #d0d0d0; " + // 悬停时加深
                    "-fx-cursor: hand;";

            musicButton.setStyle(defaultStyle);

            // 4. 悬停效果
            musicButton.setOnMouseEntered(e -> musicButton.setStyle(defaultStyle + hoverStyle));
            musicButton.setOnMouseExited(e -> musicButton.setStyle(defaultStyle));

            // 5. 点击切换音乐状态（核心逻辑）
            musicButton.setOnAction(e -> {
                isMusicPlaying = !isMusicPlaying;
                if (isMusicPlaying) {
                    // 开启音乐：显示"🔊 音乐"，播放音乐
                    mediaPlayer.play();
                    musicButton.setText("🔊 音乐");
                } else {
                    // 关闭音乐：显示"🔇 音乐"，暂停音乐
                    mediaPlayer.pause();
                    musicButton.setText("🔇 音乐");
                }
            });

            // 6. 定位右上角（参考图布局）
            musicButton.setLayoutX(1555 - 100); // 距离右侧100px
            musicButton.setLayoutY(10); // 距离顶部10px

            // 7. 开始播放音乐
            mediaPlayer.play();

        } catch (URISyntaxException e) {
            System.err.println("音乐加载失败: " + e.getMessage());
            // 如果没有音乐文件，隐藏按钮
            if (musicButton != null) {
                musicButton.setVisible(false);
            }
        }

        // 创建标题文本
        Text title = new Text("美少女RPG冒险游戏");
        title.setFont(Font.font("YouYuan", FontWeight.BOLD, 56));
        title.setFill(Color.PINK);
        title.setStroke(Color.PURPLE);
        title.setStrokeWidth(2);

        // 添加标题特效
        DropShadow shadow = new DropShadow();
        shadow.setColor(Color.PURPLE);
        shadow.setRadius(20);
        shadow.setSpread(0.6);
        title.setEffect(shadow);

        Text subtitle = new Text("SenrenBanka");
        subtitle.setFont(Font.font("Monotype Corsiva", FontWeight.BOLD, 45));
        subtitle.setFill(Color.YELLOW);
        shadow.setRadius(10);
        shadow.setSpread(0.6);
        subtitle.setEffect(new Glow(0.9));

        // 创建按钮
        singlePlayerBtn = new Button("单人模式");
        twoPlayerBtn = new Button("双人模式");
        exitButton = new Button("退出游戏");

        // 设置按钮字体和大小
        Font buttonFont = Font.font("Microsoft YaHei", FontWeight.BOLD, 32);
        singlePlayerBtn.setFont(buttonFont);
        twoPlayerBtn.setFont(buttonFont);
        exitButton.setFont(buttonFont); // 统一字体

        // 设置按钮样式（模式按钮+退出按钮）
        String buttonStyle = "-fx-background-color: rgba(255, 182, 193, 0.7); " +
                "-fx-text-fill: #8B008B; " +
                "-fx-padding: 15 50; " +
                "-fx-border-color: #FF69B4; " +
                "-fx-border-width: 3; " +
                "-fx-border-radius: 20; " +
                "-fx-background-radius: 20; " +
                "-fx-min-width: 300px;";

        // 退出按钮样式微调（稍暗，区分主次）
        String exitButtonStyle = "-fx-background-color: rgba(255, 182, 193, 0.7); " +
                "-fx-text-fill: #8B008B; " + // 稍暗紫色文字
                "-fx-padding: 15 50; " +
                "-fx-border-color: #FF69B4; " + // 淡紫色边框
                "-fx-border-width: 3; " +
                "-fx-border-radius: 20; " +
                "-fx-background-radius: 20; " +
                "-fx-min-width: 300px;";

        // 应用样式
        singlePlayerBtn.setStyle(buttonStyle);
        twoPlayerBtn.setStyle(buttonStyle);
        exitButton.setStyle(exitButtonStyle); // 退出按钮使用微调样式

        // 添加按钮悬停效果（统一处理）
        List<Button> buttons = Arrays.asList(singlePlayerBtn, twoPlayerBtn, exitButton);
        String hoverStyle = "-fx-background-color: rgba(255, 105, 180, 0.9); " +
                "-fx-text-fill: white; " +
                "-fx-effect: dropshadow(gaussian, #FF1493, 15, 0.6, 0, 0);";

        for (Button btn : buttons) {
            btn.setOnMouseEntered(e -> btn.setStyle(btn == exitButton ? exitButtonStyle + hoverStyle : buttonStyle + hoverStyle));
            btn.setOnMouseExited(e -> btn.setStyle(btn == exitButton ? exitButtonStyle : buttonStyle));
        }

        // 设置按钮点击事件
        singlePlayerBtn.setOnAction(e -> onSinglePlayer.run());
        twoPlayerBtn.setOnAction(e -> onTwoPlayer.run());
        exitButton.setOnAction(e -> { // 退出按钮事件
            stopMusic(); // 停止音乐
            Platform.exit(); // 关闭JavaFX应用
            System.exit(0); // 确保程序完全退出
        });

        // 创建菜单布局
        menuBox = new VBox(30, title, subtitle, singlePlayerBtn, twoPlayerBtn, exitButton);
        menuBox.setAlignment(Pos.CENTER);

        // 计算居中位置
        double centerX = (1555 - 300) / 2.5;
        double centerY = (double) 972 / 3;

        // 添加所有元素到根布局
        Pane root = new Pane(backgroundView, menuBox, musicButton);
        menuBox.setLayoutX(centerX);
        menuBox.setLayoutY(centerY);

        scene = new Scene(root, 1555, 972);
    }

    // 停止音乐（切换界面时调用）
    public void stopMusic() {
        if (mediaPlayer != null) {
            mediaPlayer.stop();
        }
    }

    public Scene getScene() {
        return scene;
    }
}
